# python 有几种注释方式？
# 从 xml.dom.minidom 中引入  parse 方法/函数
from xml.dom.minidom import parse
# 引入 csv 库
import csv

# 定义变量 dom 存储 parse 方法执行后的返回值
# 函数的要点：接收什么输入？做了什么处理？返回了什么输出？
dom = parse('./ICTRP_Results_USA.xml')

# 如何访问对象的属性/方法？通过 . 操作符
# documentElement 是 XML 最顶层的元素
documentElement = dom.documentElement

# getElementsByTagName 是 documentElement 对象的一个方法
# 重要：学习使用内置函数 dir 查看对象的属性以及方法列表
# 重要：学习使用内置函数 help 查看对象的属性以及方法的文档注释
# 重要：学习使用内置函数 type 查看对象的类型
tags = documentElement.getElementsByTagName('Trial')

# 定义变量 results, 初始值是一个空的 list （类型）对象
# 两种常用数据结构之一： list
results = []

# 两种流程控制语句：判断 和 循环（for in, while）
for tag in tags:
    # 以下两行代码属于 python 内置 xml.dom.minidom 模块 api 的使用，另行说明
    TrialID = tag.getElementsByTagName('TrialID')[0].childNodes[0].data
    Last_Refreshed_on = tag.getElementsByTagName('Last_Refreshed_on')[
        0].childNodes[0].data
    # 两种常用数据结构之一： dict
    record = {'TrialID': TrialID, 'Last_Refreshed_on': Last_Refreshed_on}
    # list 的基本操作 添加（append），还有哪些基本操作？
    results.append(record)


def sortById(data):
    return data['TrialID']


# list 的排序
# 使用 help 内置函数，查看列表对象 sort 方法的说明：help([].sort)
# help(help) 会输出什么？
results.sort(key=sortById)

# 控制台打印 list 类型变量：results
print(results)
# 两个知识点：
# 1，字符串格式化输出
# 2，内置函数：len
print('total: %i' % (len(results)))

# with 和 as 是 python 的关键字（保留字），还有哪些关键字呢？ 可以通过：
# import keyword
# print(keyword.kwlist)
# 来查看。
with open('results.csv', 'w') as csvfile:
    # 以下代码属于 python 内置 csv 模块 api 的使用，另行说明
    fieldnames = ['TrialID', 'Last_Refreshed_on']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for item in results:
        writer.writerow(item)
